#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using std::cout;
using std::endl;
using std::string;
using std::ifstream;
using std::istringstream;

void test(){
    //string s = "123 456";
    //const string & s = "123 456";
    //istringstream主要的功能便是进行字符串的解析处理
    //比如将字符串按照空格来进行划分，划分成不同的数据部分
    //按照字符串来进行分割
    istringstream iss("123 456");
    int num, num2;
    //iss默认情况下，处理是按照空格来进行分割的
    iss >> num >> num2;
    cout << num << num2 << endl;
}

//配置文件：在一个系统中，可能会用到很多的功能性的组件
//比如数据库、阿里云这里面有很多的配置信息
//阿里云：ip、端口号、id、secret等
//数据库：ip、端口号、账号、密码等
//操作阿里云的代码可能写了很多份
//如果一个项目中，很多模块中的代码都去操作了阿里云
//那么都需要进行阿里云的配置
//如果后续阿里云服务到期了，重新买了一个新的云服务器
//此时ip地址就更改了，那么所有的代码中涉及到ip的地方全部都需要改一遍
//有没有一种方式，只需要修改一处即可呢？？
//配置文件i
//后续只要使用到配置文件里面的配置，那么全部都从配置文件中读取
//后续只需要修改配置文件即可
void test2(){
    //案例：读取project.conf配置文件里面的配置项
    //将其解析并打印出来
    ifstream ifs("project.conf");
    if(!ifs.good()){
        cout << "the file is not found" << endl;
        return;
    }
    // ifs >> word行不行？？？不行，区分不了key和value
    //istringstream构造函数要求接收string
    //并且可以按照空格来进行分割
    //先试用ifs读一行，对一行进行解析处理
    //前面的是key，后面的是value
    string line;
    string key, value;
    while(getline(ifs, line)){
        istringstream iss(line);
        iss >> key >> value;
        cout << key << ":" << value << endl;
    }
}

int main()
{
    test2();
    return 0;
}

